k8s 创建 serviceAccount 并测试其权限 您所在的位置:网站首页 k8s serviceaccount token k8s 创建 serviceAccount 并测试其权限

k8s 创建 serviceAccount 并测试其权限

#k8s 创建 serviceAccount 并测试其权限| 来源: 网络整理| 查看: 265

什么是 serviceAccount

顾名思义,相对于userAccount(比如:kubectl访问APIServer时用的就是userAccount),serviceAccount 就是 Pod 中的 Process 用于访问 Kubernetes API的 account,它为 Pod 中的进程提供了一种身份标识。相比于 userAccount 的全局性权限,serviceAccount 更适合一些轻量级的task,更聚焦于授权给某些特定Pod中的Process所使用。

serviceAccount 并不复杂,只是关联了一个 Secret 资源作为 token,该token也叫service-account-token。

任意一个 pod 如果在不指定 serviceAccount 的情况下,都是用的默认的 serviceAccount。相关内容在容器的 /run/secrets/kubernetes.io/serviceaccount 目录下。该目录下有三个文件:ca.crt,namespace,token。

ca.crt 用来验证 APIServer 的证书,因为证书都是自己生成的,所以需要创建集群 CA 证书进行验证。namespace 是该 pod 所在命名空间。token 是容器访问 APIServer 认证和授权所使用的内容,请求时放在 Authorization。

接下来创建 serviceAccount 并进行权限的测试。

serviceAccount 实战1. 创建账号和角色

sa-pod-reader.yaml

apiVersion: v1 kind: ServiceAccount metadata: name: pod-reader namespace: dev --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-role namespace: dev rules: - apiGroups: [""] # 支持的API组列表,""空字符串,表示核心API群 resources: ["pods"] # 支持的资源对象列表 verbs: ["get","watch","list"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: authorization-role-binding namespace: dev subjects: - kind: ServiceAccount name: pod-reader roleRef: kind: Role name: pod-role apiGroup: rbac.authorization.k8s.io# 创建用户和角色 kubectl apply -f sa-pod-reader.yaml

创建一个 pod-reader 的角色并和账号 pod-reader 进行绑定,pod-reader 的权限仅限于 dev 命名空间下 pod 的查询。

2. 创建 pod-reader 的 token

在以前版本的 kubernetes 中,进行了创建 serviceaccount 会自动生成一个 Secret 里面存放 token 值,但是新版本不会这样做了。可以参考之前的文章 k8s 手动管理 ServiceAccount 的 Secret。

pod-reader-token.yaml

apiVersion: v1 kind: Secret metadata: name: pod-reader namespace: dev annotations: kubernetes.io/service-account.name: pod-reader type: kubernetes.io/service-account-token# 创建 secret kubectl apply -f pod-reader-token.yaml3. 测试权限kubectl describe secret pod-reader -n dev

获取到 token 以后,使用 postman 进行测试。

设置 token。

k8s 创建 serviceAccount 并测试其权限_kubernetes

3.1 获取 dev 下的 pod

k8s 创建 serviceAccount 并测试其权限_容器_02

可以看见能够进行获取。

3.2 获取 default 下的 pod

k8s 创建 serviceAccount 并测试其权限_docker_03

提示没有权限,至此,测试完毕。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有